const { DataTypes } = require("sequelize");
const seq = require("../db/seq");

const Order = seq.define(
  "zd_orders",
  {
    user_id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      comment: "用户id",
    },
    address_id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      comment: "地址id",
    },
    goods_info: {
      type: DataTypes.TEXT, // DataTypes.STRING类型最多只能存储255个字节，用来存储订单信息长度不太够，改用DataTypes.TEXT长文本格式(最多存储65535个字节)
      allowNull: false,
      comment: "商品信息",
    },
    total: {
      type: DataTypes.DECIMAL(10, 2), // 定义类型为10进制小数类型，保留两位小数
      allowNull: false,
      comment: "订单总金额",
    },
    order_number: {
      type: DataTypes.CHAR(19), // 适配19位的订单编号
      allowNull: false,
      unique: true, // 数据库层面强制唯一，双重保障
      comment: "订单编号，19位固定长度（三位前缀+13位时间戳+3位随机数），全局唯一",
    },
    status: {
      type: DataTypes.TINYINT,
      allowNull: false,
      defaultValue: 0,
      comment: "订单状态(0: 未支付; 1: 已支付; 2: 已发货; 3: 已签收; 4: 取消。)",
    },
  },
  {
    /**
     * 表名配置：强制指定表名称
     * 若不设置，Sequelize默认会将模型名复数化作为表名（如模型名'user'会对应表名'users'）
     */
    tableName: "zd_orders",
    /**
     * 是否自动创建 createdAt(创建时刻的时间戳) 和 updatedAt(最新更新的时间戳) 字段，默认值为true。
     * 如果需要自定义这两个字段的名称，可以通过createdAt和updatedAt配置（如createdAt: 'create_time'）。
     */
    timestamps: true,
  },
);

/**
 * 模型同步（即同步到数据库，在数据库中创建表，首次执行完后注释掉代码）
 * 通过此调用Sequelize将自动对数据库执行SQL查询
 * 注意：这仅更改数据库中的表，而不是更改js端的模型。
 */
// Order.sync({
//   force: true, // force为true时，若数据库中已经存在该表，则会先强制删除该表，再创建该表；force为false时(不配置该属性时默认为false)，若数据库中已经存在该表，则不会再创建该表
// });

module.exports = Order;
